package com.cysoft.third.echarts.component.grid;

import java.io.Serializable;

/**
 * @author 玖零
 * @version v0.0.1
 * @project cysoft-third-echarts
 * @package com.cysoft.third.echarts.component.grid
 * @date 2025/3/12 10:45
 * @desc 直角坐标系内绘图网格，单个 grid 内最多可以放置上下两个 X 轴，左右两个 Y 轴。可以在网格上绘制折线图，柱状图，散点图（气泡图）。
 */
public class Grid implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 组件 ID。默认不指定。指定则可用于在 option 或者 API 中引用组件。
     */
    private String id;

    /**
     * 是否显示直角坐标系网格。
     */
    private Boolean show = false;
    /**
     * 所有图形的 zlevel 值。
     * zlevel 用于 Canvas 分层，不同 zlevel 值的图形会放置在不同的 Canvas 中，
     * Canvas 分层是一种常见的优化手段。可以把一些图形变化频繁（例如有动画）的组件设置成一个单独的 zlevel。
     * 需要注意的是过多的 Canvas 会引起内存开销的增大，在手机端上需要谨慎使用以防崩溃。
     * zlevel 大的 Canvas 会放在 zlevel 小的 Canvas 的上面。
     */
    private Integer zlevel = 0;
    /**
     * 组件的所有图形的 z 值。控制图形的前后顺序。z 值小的图形会被 z 值大的图形覆盖。
     * z 相比 zlevel 优先级更低，而且不会创建新的 Canvas。
     */
    private Integer z = 2;
    /**
     * grid 组件离容器左侧的距离。
     * left 的值可以是像 20 这样的具体像素值，可以是像 '20%' 这样相对于容器高宽的百分比，
     * 也可以是 'left', 'center', 'right'。
     * 如果 left 的值为 'left', 'center', 'right'，组件会根据相应的位置自动对齐。
     */
    private String left = "10%";
    /**
     * grid 组件离容器上侧的距离。
     * top 的值可以是像 20 这样的具体像素值，可以是像 '20%' 这样相对于容器高宽的百分比，
     * 也可以是 'top', 'middle', 'bottom'。
     * 如果 top 的值为 'top', 'middle', 'bottom'，组件会根据相应的位置自动对齐。
     */
    private Object top = 60;
    /**
     * grid 组件离容器右侧的距离。
     * right 的值可以是像 20 这样的具体像素值，可以是像 '20%' 这样相对于容器高宽的百分比。
     */
    private String right = "10%";
    /**
     * grid 组件离容器下侧的距离。
     * bottom 的值可以是像 20 这样的具体像素值，可以是像 '20%' 这样相对于容器高宽的百分比。
     */
    private Object bottom = 60;
    /**
     * grid 组件的宽度。默认自适应。
     */
    private String width = "auto";
    /**
     * grid 组件的高度。默认自适应。
     */
    private String height = "auto";
    /**
     * grid 区域是否包含坐标轴的刻度标签。
     * containLabel 为 false 的时候：
     * grid.left grid.right grid.top grid.bottom grid.width grid.height 决定的是由坐标轴形成的矩形的尺寸和位置。
     * 这比较适用于多个 grid 进行对齐的场景，因为往往多个 grid 对齐的时候，是依据坐标轴来对齐的。
     * containLabel 为 true 的时候：
     * grid.left grid.right grid.top grid.bottom grid.width grid.height 决定的是包括了坐标轴标签在内的所有内容所形成的矩形的位置。
     * 这常用于『防止标签溢出』的场景，标签溢出指的是，标签长度动态变化时，可能会溢出容器或者覆盖其他组件。
     */
    private Boolean containLabel = false;
    /**
     * 网格背景色，默认透明。
     * 颜色可以使用 RGB 表示，比如 'rgb(128, 128, 128)' ，如果想要加上 alpha 通道，可以使用 RGBA，
     * 比如 'rgba(128, 128, 128, 0.5)'，也可以使用十六进制格式，比如 '#ccc'
     * 注意：此配置项生效的前提是，设置了 show: true。
     */
    private String backgroundColor = "transparent";
    /**
     * 网格的边框颜色。支持的颜色格式同 backgroundColor。
     * 注意：此配置项生效的前提是，设置了 show: true。
     */
    private String borderColor = "#ccc";
    /**
     * 网格的边框线宽。
     * 注意：此配置项生效的前提是，设置了 show: true。
     */
    private Integer borderWidth = 1;
    /**
     * 图形阴影的模糊大小。该属性配合 shadowColor, shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
     * 示例：
     * {
     * shadowColor: 'rgba(0, 0, 0, 0.5)',
     * shadowBlur: 10
     * }
     * 注意：此配置项生效的前提是，设置了 show: true 以及值不为 transparent 的背景色 backgroundColor。
     */
    private Integer shadowBlur;
    /**
     * 阴影颜色。支持的格式同 color。
     * 注意：此配置项生效的前提是，设置了 show: true。
     */
    private String shadowColor;
    /**
     * 阴影水平方向上的偏移距离。
     * 注意：此配置项生效的前提是，设置了 show: true。
     */
    private Integer shadowOffsetX = 0;
    /**
     * 阴影垂直方向上的偏移距离。
     * 注意：此配置项生效的前提是，设置了 show: true。
     */
    private Integer shadowOffsetY = 0;
    /**
     * 本坐标系特定的 tooltip 设定。
     * //TODO：是否使用内嵌属性后续待定
     */
    private Object tooltip;
}
